package git.soulbgm.common.enums;

/**
 * 前端返回统一状态code和消息
 *
 * @author SoulBGM
 * @date 2020-11-18 10:03:05
 */
public enum CodeEnum {
    /**
     * 成功
     */
    SUCCESS(200, "成功"),
    /**
     * 操作失败
     */
    ERROR(712, ""),
    /**
     * 添加失败
     */
    SAVE_FAIL(701, "添加失败"),
    /**
     * 删除失败
     */
    REMOVE_FAIL(702, "删除失败"),
    /**
     * 修改失败
     */
    UPDATE_FAIL(703, "修改失败"),
    /**
     * 此ID不存在
     */
    INVALID_FAIL(404, "此ID不存在"),
    /**
     * 查询失败
     */
    QUERY_FAIL(704, "查询失败"),
    /**
     * 绑定失败
     */
    BIND_FAIL(705, "绑定失败"),
    /**
     * 后端出现异常
     */
    FAIL(500, "后台出现异常错误"),
    /**
     * 登录成功
     */
    LOGIN_SUCCESS(200, "登录成功"),
    /**
     * 未登录
     */
    NOT_LOGIN(706, "未登录或登录超时"),
    /**
     * 注销成功
     */
    LOGOUT_SUCCESS(200, "注销成功"),
    /**
     * 已登录
     */
    HAS_LOGGED(200, "已登录"),
    /**
     * 登录失败
     */
    LOGIN_FAIL(403, "登录失败"),
    /**
     * 未知账户
     */
    UNKNOWN_ACCOUNT(707, "用户不存在"),
    /**
     * 密码错误
     */
    PASSWORD_ERROR(708, "密码错误"),
    /**
     * 账户已锁定
     */
    ACCOUNT_LOCKED(709, "账户已锁定"),
    /**
     * 请求格式错误
     */
    FORMAT_ERROR(710,"请求格式错误"),
    /**
     * 令牌无效
     */
    TOKEN_INVALID(711,"token值无效，请重新登录"),
    /**
     * 用户名或密码不正确
     */
    USERNAME_OR_PASSWORD_IS_INCORRECT(403, "用户名或密码不正确"),
    /**
     * 用户名或密码错误次数过多
     */
    TOO_MANY_INCORRECT_USERNAME_OR_PASSWORD(403, "用户名或密码错误次数过多"),
    /**
     * 没有此权限
     */
    NO_SUCH_PERMISSION(403, "没有此权限"),
    /**
     * 请先登录
     */
    NO_LOGIN(401, "请先登录"),

    /**
     * 压底的(●'◡'●)
     */
    END(200, "");

    /**
     * 状态码
     */
    private final int code;
    /**
     * 提示信息
     */
    private final String msg;

    CodeEnum(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public int getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }

    public static CodeEnum getByCode(int code) {
        for (CodeEnum anEnum : CodeEnum.values()) {
            if (anEnum.getCode() == code) {
                return anEnum;
            }
        }
        throw new RuntimeException("枚举中无此code码");
    }

    public static CodeEnum getByMsg(String msg) {
        for (CodeEnum anEnum : CodeEnum.values()) {
            if (anEnum.getMsg().equals(msg)) {
                return anEnum;
            }
        }
        throw new RuntimeException("枚举中无此提示信息");
    }

}
